原始题目:剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 (opens new window)
解题思路:
可以仿照快速排序中 操作的思路,使用两个指针 ,
当 指向的是奇数时, 自增;
当 指向的是偶数时, 自减;
和 指向的元素交换。
循环上面的操作,直到 。
代码:
public int[] exchange(int[] nums) {
if (nums == null || nums.length == 0) {
return new int[0];
}
int l = 0, r = nums.length - 1;
while (l < r) {
while (l < r && (nums[l] & 1) == 1) {
l++;
}
while (l < r && (nums[r] & 1) == 0) {
r--;
}
swap(nums, l, r);
}
return nums;
}
private void swap(int[] nums, int i, int j) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
复杂度分析
时间复杂度:需要遍历 N 个元素。
空间复杂度: 和 都是常数级的额外空间。